//路由鉴权:鉴权,项目当中路由能不能被的权限的设置(某一个路由什么条件下可以访问、什么条件下不可以访问)
import router from '@/router'

import nprogress from 'nprogress'
//引入进度条样式
import 'nprogress/nprogress.css'

nprogress.configure({showSpinner: false})
//获取用户相关的内部token数据,去判断用户是否登录成功
import {useUserStore} from '@/store/modules/user'
import pinia from './store'

let userStore = useUserStore(pinia)

//全局守卫:项目当中任意路由切换都会触发的钩子
//全局前置守卫
router.beforeEach(async (to: any, from: any, next: any) => {
    nprogress.start()
    document.title = `${import.meta.env.VITE_APP_TITLE} - ${to.meta.title}`
    // 判断该路由是否需要登录权限
    if (to.meta.requiresAuth) {
        // 检查用户是否登录
        if (userStore.id) {
            // 用户已登录，放行
            next()
        } else {
            try {
                // 获取用户信息
                await userStore.userInfo();
                // 放行当前路由，确保异步路由加载完成
                next({...to, replace: true});
            } catch (error) {
                // 捕获异常: token 过期或用户信息无效
                await userStore.userLogout();
                next({path: '/login', query: {redirect: to.fullPath}});
            }
        }
    } else {
        // 不需要登录权限的路由，直接放行
        next()
    }
})
//全局后置守卫
router.afterEach(() => {
    nprogress.done()
})